home *** CD-ROM | disk | FTP | other *** search
/ Almathera Ten Pack 3: CDPD 3 / Almathera Ten on Ten - Disc 3: CDPD3.iso / scope / 076-100 / scopedisk81 / asmtool1 / macros.asm < prev    next >
Assembly Source File  |  1995-03-19  |  9KB  |  301 lines

  1.    XREF    _LVOOpenLibrary
  2.    XREF    _LVOOpen
  3.    XREF    _LVOClose
  4.    XREF    _LVORename
  5.    XREF    _LVODeleteFile
  6.    XREF    _LVOInput
  7.    XREF    _LVOOutput
  8.    XREF    _LVORead
  9.    XREF    _LVOWrite
  10.    XREF    _LVOSeek
  11.    XREF    _LVOCloseLibrary
  12.  
  13.    XREF    _AbsExecBase
  14.  
  15.    IFND    LF
  16. LF EQU     10
  17.    ENDC
  18.  
  19. ;NA = Number of Arguments
  20. ;SB = the location of a string buffer
  21.  
  22. Start      MACRO               ;(no args)
  23.            MOVE.L  A7,SystemSP
  24.            JSR     OpenDOSLibrary
  25.            ENDM
  26.  
  27. Open       MACRO
  28.            MOVEM.L A0-A1,-(A7)
  29.            MOVE.L  \1,A0       ;\1 => SB containing the filename
  30.            MOVE.L  #\2,A1
  31.            JSR     OpenFile
  32.            MOVEM.L (A7)+,A0-A1
  33.            ENDM
  34.  
  35. Create     MACRO
  36.            MOVEM.L A0-A1,-(A7)
  37.            MOVE.L  \1,A0       ;\1 => SB containing the filename
  38.            MOVE.L  #\2,A1      ;\2 => the file handle
  39.            JSR     CreateFile
  40.            MOVEM.L (A7)+,A0-A1
  41.            ENDM
  42.  
  43. Read       MACRO
  44.            MOVEM.L A0-A1,-(A7)
  45.            MOVE.L  \1,A0       ;\1 => the file handle
  46.            MOVE.L  \2,A1       ;\2 => SB to receive the disk record
  47.            JSR     ReadFile
  48.            MOVEM.L (A7)+,A0-A1
  49.            ENDM
  50.  
  51. Write      MACRO
  52.            MOVEM.L A0-A1,-(A7)
  53.            MOVE.L  \1,A0       ;\1 => the file handle
  54.            MOVE.L  \2,A1       ;\2 => SB containing the disk record
  55.            JSR     WriteFile
  56.            MOVEM.L (A7)+,A0-A1
  57.            ENDM
  58.  
  59. Seek       MACRO
  60.            MOVEM.L A0/D0-D1,-(A7)
  61.            MOVE.L  \1,A0       ;\1 => the file handle
  62.            MOVE.L  \2,D0       ;\2 => the position to which to seek
  63.            MOVE.L  #-1,D1
  64.            JSR     SeekFile
  65.            MOVEM.L (A7)+,A0/D0-D1
  66.            ENDM
  67.  
  68. Close      MACRO
  69.            MOVEM.L A0,-(A7)
  70.            MOVE.L  \1,A0       ;\1 => the file handle
  71.            JSR     CloseFile
  72.            MOVEM.L (A7)+,A0
  73.            ENDM
  74.  
  75. Rename     MACRO
  76.            MOVEM.L A0-A1,-(A7)
  77.            MOVE.L  \1,A0       ;\1 => SB containing the current filename
  78.            MOVE.L  \2,A1       ;\2 => SB containing the new filename
  79.            JSR     RenameFile
  80.            MOVEM.L (A7)+,A0-A1
  81.            ENDM
  82.  
  83. Delete     MACRO
  84.            MOVEM.L A0,-(A7)
  85.            MOVE.L  \1,A0       ;\1 => SB containing the filename
  86.            JSR     DeleteFile
  87.            MOVEM.L (A7)+,A0
  88.            ENDM
  89.  
  90. ReadCon    MACRO               ;\1 => SB containing text to send to the
  91.                                ; console
  92.            MOVEM.L D0/A0-A1,-(A7)
  93.            MOVE.L  ConIn,A0
  94.            MOVE.L  \1,A1
  95.            JSR     ReadFile
  96.            MOVE.L  \1,A1       ;(Lop off the terminating LineFeed)
  97.            ADDQ.L  #4,A1
  98.            SUBI.L  #1,(A1)
  99.            MOVEM.L (A7)+,D0/A0-A1
  100.            ENDM
  101.  
  102. WritCon    MACRO               ;\1 => SB containing text to send to the
  103.                                ; console
  104.            MOVEM.L D0/A0-A1,-(A7)
  105.            MOVE.L  ConOut,A0
  106.            MOVE.L  \1,A1
  107.            JSR     WriteFile
  108.            MOVEM.L (A7)+,D0/A0-A1
  109.            ENDM
  110.  
  111. SetScan    MACRO                ;\1 => SB to scan later
  112.            MOVEM.L A0,-(A7)
  113.            MOVEA.L \1,A0
  114.            ADDQ.L  #4,A0
  115.            MOVE.L  (A0),ScanCounter
  116.            ADDQ.L  #4,A0
  117.            MOVE.L  A0,ScanPointer
  118.            MOVEM.L (A7)+,A0
  119.            ENDM
  120.  
  121. Scanc      MACRO               ;\1 => SB to receive the next character
  122.            MOVEM.L A0,-(A7)    ; scanned
  123.            MOVEA.L \1,A0
  124.            JSR     Scanc_
  125.            MOVEM.L (A7)+,A0
  126.            ENDM
  127.  
  128. Scanw      MACRO               ;\1 => SB to receive the next word scanned
  129.            MOVEM.L A0,-(A7)
  130.            MOVEA.L \1,A0
  131.            JSR     Scanw_
  132.            MOVEM.L (A7)+,A0
  133.            ENDM
  134.  
  135. Scana      MACRO               ;\1 => SB to receive the next alphanumeric
  136.            MOVEM.L A0,-(A7)    ; word scanned (stopping at punctuation and
  137.            MOVEA.L \1,A0       ; special characters)
  138.            JSR     Scana_
  139.            MOVEM.L (A7)+,A0
  140.            ENDM
  141.  
  142. StrCpy     MACRO               ;\1 => SB to copy
  143.            MOVEM.L A0/A1,-(A7) ;\2 => SB to copy to
  144.            MOVEA.L \1,A0
  145.            MOVEA.L \2,A1
  146.            JSR     StrCpy_
  147.            MOVEM.L (A7)+,A0/A1
  148.            ENDM
  149.  
  150. StrCat     MACRO               ;\1 => SB to concatenate
  151.            MOVEM.L A0/A1,-(A7) ;\2 => SB to be concatenated onto
  152.            MOVEA.L \1,A0
  153.            MOVEA.L \2,A1
  154.            JSR     StrCat_
  155.            MOVEM.L (A7)+,A0/A1
  156.            ENDM
  157.  
  158. StrCmp     MACRO               ;\1 => SB to compare
  159.            MOVEM.L A0/A1,-(A7) ;\2 => SB to compare
  160.            MOVEA.L \1,A0       ; (Zero flag is set or cleared accordingly)
  161.            MOVEA.L \2,A1
  162.            JSR     StrCmp_
  163.            MOVEM.L (A7)+,A0/A1
  164.            ENDM
  165.  
  166. StrLen     MACRO               ;\1 => SB to examine the length of
  167.            MOVEM.L A0/A1,-(A7)
  168.            MOVEA.L \1,A0
  169.            JSR     StrLen_
  170.            MOVEM.L (A7)+,A0/A1
  171.            ENDM
  172.  
  173. Left       MACRO               ;\1 => SB containing the source string
  174.            MOVEM.L A0/A1/D0,-(A7)
  175.            MOVEA.L \1,A0       ;\2 = number of bytes to copy
  176.            MOVE.L  \2,D0       ;\3 => SB containing the destination string
  177.            MOVEA.L \3,A1
  178.            JSR     Left_
  179.            MOVEM.L (A7)+,A0/A1/D0
  180.            ENDM
  181.  
  182. Mid        MACRO               ;\1 => SB containing the source string
  183.            MOVEM.L A0/A1/D0/D1,-(A7)
  184.            MOVEA.L \1,A0       ;\2 = point at which to start copying
  185.            MOVE.L  \2,D0       ;\3 = number of bytes to copy
  186.            MOVE.L  \3,D1       ;\4 => SB containing the destination string
  187.            MOVEA.L \4,A1
  188.            JSR     Mid_
  189.            MOVEM.L (A7)+,A0/A1/D0/D1
  190.            ENDM
  191.  
  192. Right      MACRO               ;\1 => SB containing the source string
  193.            MOVEM.L A0/A1/D0,-(A7)
  194.            MOVEA.L \1,A0       ;\2 = number of bytes to copy
  195.            MOVE.L  \2,D0       ;\3 => SB containing the destination string
  196.            MOVEA.L \3,A1
  197.            JSR     Right_
  198.            MOVEM.L (A7)+,A0/A1/D0
  199.            ENDM
  200.  
  201. AtoI       MACRO               ;\1 => SB to be converted
  202.            MOVEM.L D0/A0,-(A7) ;\2 => integer result
  203.            MOVE.L  \1,A0
  204.            JSR     AtoI_
  205.            MOVE.L  D0,\2
  206.            MOVEM.L (A7)+,D0/A0
  207.            ENDM
  208.  
  209. ItoA       MACRO               ;\1 => integer to be converted
  210.                                ;\2 => SB result
  211.            MOVEM.L D0/A0,-(A7)
  212.            MOVE.L  \1,D0
  213.            MOVE.L  \2,A0
  214.            JSR     ItoA_
  215.            MOVEM.L (A7)+,D0/A0
  216.            ENDM
  217.  
  218. HAtoI      MACRO
  219.            MOVEM.L D0/A0,-(A7)
  220.            MOVE.L  \1,A0
  221.            JSR     HAtoI_
  222.            MOVE.L  D0,\2
  223.            MOVEM.L (A7)+,D0/A0
  224.            ENDM
  225.  
  226. ItoHA8     MACRO
  227.            MOVEM.L D0/A0,-(A7)
  228.            MOVE.L  \1,D0
  229.            MOVE.L  \2,A0
  230.            JSR     ItoHA8_
  231.            MOVEM.L (A7)+,D0/A0
  232.            ENDM
  233.  
  234. ItoHA4     MACRO
  235.            MOVEM.L D0/A0,-(A7)
  236.            MOVE.W  \1,D0
  237.            MOVE.L  \2,A0
  238.            JSR     ItoHA4_
  239.            MOVEM.L (A7)+,D0/A0
  240.            ENDM
  241.  
  242. ItoHA2     MACRO
  243.            MOVEM.L D0/A0,-(A7)
  244.            MOVE.B  \1,D0
  245.            MOVE.L  \2,A0
  246.            JSR     ItoHA2_
  247.            MOVEM.L (A7)+,D0/A0
  248.            ENDM
  249.  
  250. ItoHA1     MACRO
  251.            MOVEM.L D0/A0,-(A7)
  252.            MOVE.B  \1,D0
  253.            MOVE.L  \2,A0
  254.            JSR     ItoHA1_
  255.            MOVEM.L (A7)+,D0/A0
  256.            ENDM
  257.  
  258. Exit       MACRO               ;(no args)
  259.            JSR     CloseDOSLibrary
  260.            MOVEA.L SystemSP,A7
  261.            RTS
  262.            ENDM
  263.  
  264. Crlf       MACRO               ;(no args)
  265.            JSR     DisplayCrlf
  266.            ENDM
  267.  
  268. Space      MACRO               ;(no args)
  269.            JSR     DisplaySpace
  270.            ENDM
  271.  
  272. Display    MACRO               ;\1 => SB to be displayed on the console
  273.            MOVEM.L D0,-(A7)
  274.            WritCon #Displ\@
  275.            BRA     Displ_3\@
  276. Displ\@    DC.L    Displ_2\@-Displ_1\@,Displ_2\@-Displ_1\@
  277. Displ_1\@  DC.B    \1
  278. Displ_2\@
  279.            CNOP    0,2
  280. Displ_3\@  MOVEM.L (A7)+,D0
  281.            ENDM
  282.  
  283. StrBuf     MACRO               ;\1 = a string buffer label
  284.            CNOP    0,2         ;\2 = the maximum length of the string buffer
  285. \1
  286.            DC.L    \2,0
  287.            DS.B    \2
  288.            CNOP    0,2
  289.            ENDM
  290.  
  291. String     MACRO               ;\1 = a string buffer label
  292.            CNOP    0,2         ;\2 = the string
  293. \1
  294. String\@   DC.L    String_2\@-String_1\@,String_2\@-String_1\@
  295. String_1\@ DC.B    \2
  296. String_2\@
  297.            CNOP    0,2
  298.            ENDM
  299.  
  300.  
  301.